
package mx.com.matersys.vacs.web;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;

import mx.com.matersys.vacs.domain.ActividadesRecomendaciones;
import mx.com.matersys.vacs.domain.Consulta;
import mx.com.matersys.vacs.domain.Especialista;
import mx.com.matersys.vacs.domain.Estatus;
import mx.com.matersys.vacs.domain.Mensajes;
import mx.com.matersys.vacs.domain.Paciente;

import org.springframework.roo.addon.web.mvc.controller.RooWebScaffold;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import mx.com.matersys.vacs.domain.Consulta;
import mx.com.matersys.vacs.utils.Constantes;
import mx.com.matersys.vacs.utils.JsonSerializer;

import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.roo.addon.web.mvc.controller.RooWebScaffold;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import flexjson.JSONDeserializer;
import flexjson.JSONSerializer;



@RooWebScaffold(path = "consultas", formBackingObject = Consulta.class)
@RequestMapping("/consultas")
@Controller
public class ConsultaController {
	
	
	   @RequestMapping(value = "/guardaConsulta", method = RequestMethod.POST)
	    public ResponseEntity<java.lang.String> guardaConsulta( @RequestParam(value = "identEspecialista", required = false) Integer idEspecialista, 
				  @RequestParam(value = "identPaciente", required = false) Integer idPaciente, 
				  @RequestParam(value = "pesoCons", required = false) String pesoCons,
				  @RequestParam(value = "tallaCons", required = false) String tallaCons,
				  @RequestParam(value = "alergiasCons", required=false) String alergiasCons,
				  @RequestParam(value = "frecCardCons", required=false) String frecCardCons,
				  @RequestParam(value = "frecRespCons", required=false) String frecRespCons, //TODO
				  @RequestParam(value = "tempCons", required=false) String tempCons,    //TODO
				  @RequestParam(value = "tensionArtCons", required=false) String tensionArtCons,
				  @RequestParam(value = "glucosaCons", required=false) String glucosaCons,
				  @RequestParam(value = "diagnostico", required=false) String diagnostico,
				  @RequestParam(value = "tratamiento", required=false) String tratamiento,
				  @RequestParam(value = "medidasDieta", required=false) String medidasDieta,
				  @RequestParam(value = "notasConsulta", required=false) String notasConsulta,
				  @RequestParam(value = "actividades", required=false) String actividades) {
		   
			List <ActividadesRecomendaciones> listado =null;
		   try {
			listado = getListadoActyRec(actividades);
		} catch (ParseException e) {
		
			e.printStackTrace();
		}
		
		   
		   Consulta consulta = new Consulta();
		   consulta.setAlergias(alergiasCons);
		   consulta.setFechaConsulta(new Date());
		   consulta.setFrecuenciaCardiaca(frecCardCons);
		   consulta.setGlucosa(glucosaCons);
		   consulta.setDiagnostico(diagnostico);
		   consulta.setTratamiento(tratamiento);
		   consulta.setDietaEjercicios(medidasDieta);
		   
		   Especialista esp = Especialista.findEspecialista(idEspecialista);
		   Paciente paciente = Paciente.findPaciente(idPaciente);
		   
		   consulta.setIdespecialista(esp);
		   consulta.setIdpaciente(paciente);
		   consulta.setNotas(notasConsulta);
		   consulta.setPeso(pesoCons);
		   consulta.setTalla(tallaCons);
		   consulta.setTensionArterial(tensionArtCons);
		   
		   System.out.println(idEspecialista+','+idPaciente+','+alergiasCons+','+consulta.getFechaConsulta()+','+ frecCardCons+','+glucosaCons);
		     
		   consulta.persist();
		   
		   if(consulta !=null && consulta.getIdconsulta() > 0 ){
			   for(ActividadesRecomendaciones el: listado){
				   el.setIdconsulta(consulta.getIdconsulta());
				   el.persist();
				
			   }
		   }
		    
		   
		  // 	System.out.println(editorDeMensaje+','+receptor+','+ transmisor+','+titulomensaje+','+isimportante+','+isespecialistatransm);
	        
		   	HttpHeaders headers = new HttpHeaders();

		   	headers.set("Content-Type", "text/html");
	        headers.add("Content-Type", "application/text; charset=utf-8");
	        
	        //String json = Paciente.toJsonArray(listP);
	        return new ResponseEntity<String>("true", headers, HttpStatus.OK);
	        
	   }
	
	    @RequestMapping(value = "/getConsultasById", method = RequestMethod.GET, headers = "Accept=application/json")
	     public ResponseEntity<java.lang.String> getConsultasById(@RequestParam(value = "idPaciente", required = true) Integer idPaciente) {
	         HttpHeaders headers = new HttpHeaders();
	         headers.set("Content-Type", "application/json");
	         headers.add("Content-Type", "application/text; charset=utf-8");
	       //  System.out.println("idPaciente: " + idPaciente);
	         List<Consulta> list = Consulta.findConsultasByIdPaciente(idPaciente);
	         return new ResponseEntity<String>(JsonSerializer.serialize(list ,List.class), headers, HttpStatus.OK);
	     }

	    
		
	    @RequestMapping(value = "/getConsultasByIdPeriodo", method = RequestMethod.GET, headers = "Accept=application/json")
	     public ResponseEntity<java.lang.String> getConsultasByIdPeriodo(@RequestParam(value = "idPaciente", required = true) Integer idPaciente, 
	    		 														 @RequestParam(value = "fechaDesde", required = true) String fechaDesde,
	    		 														 @RequestParam(value = "fechaHasta", required = true) String fechaHasta) {
	         HttpHeaders headers = new HttpHeaders();
	         headers.set("Content-Type", "application/json");
	         headers.add("Content-Type", "application/text; charset=utf-8");
	       //  System.out.println("idPaciente: " + idPaciente);
		    	
	         List<Consulta> list=null;
			try {
				list = Consulta.findConsultasByIdPacientePeriodo(idPaciente, Constantes.transformDate(fechaDesde),Constantes.transformDate(fechaHasta));
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	         return new ResponseEntity<String>(JsonSerializer.serialize(list ,List.class), headers, HttpStatus.OK);
	     }
	    
	    private static List <ActividadesRecomendaciones> getListadoActyRec(String actividades) throws ParseException{
	    	List <ActividadesRecomendaciones> list = new ArrayList<ActividadesRecomendaciones>();
	    	StringTokenizer registros = new StringTokenizer(actividades,"||");
	    	
	    	SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
	        while (registros.hasMoreElements()) {
				String object = (String) registros.nextElement();

				String []componentes = object.split("&&");
		    	if(componentes!=null && componentes.length >3){	
		    		ActividadesRecomendaciones bean = new ActividadesRecomendaciones();
		    		
		    		//bean.setIdconsulta(1);
		    		bean.setTitulo(componentes[0]);
		    		bean.setIndicaciones(componentes[1]);
		    		bean.setFechaDesde(format.parse(componentes[2]));
		    		bean.setFechaHasta(format.parse(componentes[3]));
		    		
		    		list.add(bean);
		    	}
			}
	    	
	    	
	    	return list;
	    }
	    
	 
	    
}


